/*On synchronise les données de l'adversaire*/
function receivePushMessage(message)
{
    if(message.pseudo == v["joueur-dist"].pseudo || c["watch"])
    {
        v["constantes"].isLoading.loading = false;
        if(c["watch"])
        {
            if(message.pseudo == c["me"].pseudo)
            {
                var joueur = "joueur";
                var joueurOpp = "joueur-dist";
                var item = "item";
                var pattern = "pattern";
                var weapon = "weapon";
            } else if(message.pseudo == c["op"].pseudo)
            {
                var joueur = "joueur-dist";
                var joueurOpp = "joueur";
                var item = "item-dist";
                var pattern = "pattern-dist";
                var weapon = "weapon-dist";
            } else {
                return;
            }
        }
        else {
            var joueur = "joueur-dist";
            var joueurOpp = "joueur";
            var item = "item-dist";
            var pattern = "pattern-dist";
            var weapon = "weapon-dist";
        }
        
        switch (message.type)
        {
            case "init_ok" : 
				if(!v["constantes"].start){
					v[joueur].backgroundPos = parseInt(message.bgPos, 10);
					v[joueur].backgroundDom.style.backgroundPosition = v[joueur].backgroundPos + "px";
					v[joueur].backgroundDom.style.backgroundImage = "url('/files/images/background"+message.background+".png')";
					v[joueur].persoId = message.perso;

					v[item].splice(0, v[item].length-1);

					v[pattern] = message.pattern;
					for(iPat in v[pattern]){
						if(v[pattern][iPat].x != "no")
						{
							displayPattern(joueur, v[pattern][iPat].id, v[pattern][iPat].x);
						}
					}
					v[joueur].col = message.col;
					v[joueur].ligne = message.ligne;
					updateInfo(message);
					if(!c["watch"]){
						PUBNUB.publish({             // SEND A MESSAGE.
							channel : c["channel"].saut,
							message : {
								"type": "init_go",
								"vie": v["joueur"].vies,
								"rage":v["joueur"].rage,
								"furious":v["joueur"].furious,
								"isShield":v["weapon"].Shield.enable,
								"nbShield":v["weapon"].Shield.number,
								"nbBullet":v["weapon"].FireBullet.number,
								"nbHeal":v["weapon"].Heal.number,
								"nbSpecial":v["weapon"].Special.number,
								"bgPos" : v["joueur"].backgroundPos,
								"background" : v["joueur"].backgroundId, 
								"perso" : v["joueur"].persoId,
								"ident" : v["joueur"].ident,
								"pseudo" : v["joueur"].pseudo,
								"pattern" : v["pattern"],
								"col" : v["joueur"].col,
								"ligne" : v["joueur"].ligne
							}
						})
					}
					v["constantes"].start = true;
				}
            break;
            case "init_go" : 
				if(!v["constantes"].start){
					v[joueur].backgroundPos = parseInt(message.bgPos, 10);
					v[joueur].backgroundDom.style.backgroundPosition = v[joueur].backgroundPos + "px";
					v[joueur].backgroundDom.style.backgroundImage = "url('/files/images/background"+message.background+".png')";
					v[joueur].persoId = message.perso;

					v[item].splice(0, v[item].length-1);

					v[pattern] = message.pattern;
					for(iPat in v[pattern]){
						if(v[pattern][iPat].x != "no")
						{
							displayPattern(joueur, v[pattern][iPat].id, v[pattern][iPat].x);
						}
					}
					v[joueur].col = message.col;
					v[joueur].ligne = message.ligne;
					updateInfo(message);
					v["constantes"].start = true;
				}
            break;
            case "leave" :
                clearInterval(v["timer"]);
                v["timer"] = "stop";
                document.getElementById("alert_message").innerHTML = "YOUR OPPONENT JUST LEFT - YOU WIN YOU BASTERD !";
                $.get("/game/oppoLeft", function(){
                    window.location.href = "/rooms";
                });
                break;
            case "loose" :
                clearInterval(v["timer"]);
                v["timer"] = "stop";
                document.getElementById("alert_message").innerHTML = "YOUR OPPONENT JUST LOOSE THE GAME - YOU WILL BE REDIRECTED !";
                $( "#dialog:ui-dialog" ).dialog( "destroy" );
                $("#dialog-message-win").dialog({
                        resizable: false,
                        modal: true,
                        buttons: {
                                Ok: function() {
                                        $( this ).dialog( "close" );
                                        window.location.href = "/rooms";
                                }
                        }
                });
                break;
            case "item" : 
                switch (message.item)
                    {
                        case "firebullet" :
                            if(c["watch"] && joueur == "joueur"){
                                receiveFireBullet("joueur-dist",message.y);
                            } else if(c["watch"] && joueur == "joueur-dist"){
                                receiveFireBullet("joueur",message.y);
                            } else if(v["joueur"].pseudo == message.pseudo){
                                receiveFireBullet("joueur-dist",message.y);
                            } else {
                                receiveFireBullet("joueur", message.y);
                            }
                            break;
                    }
                    updateInfo(message);
                break;
            case "saut" :
                    v[joueur].bSaute = false;

                    v[joueur].hauteur = parseInt(message.hauteur, 10);
                    v[joueur].occurSaute = parseInt(message.occurSaute, 10);
                    sauter(joueur);
                    v[joueur].backgroundPos = parseInt(message.bgPos, 10);
                    v[joueur].backgroundDom.style.backgroundPosition = v[joueur].backgroundPos + "px";
                    v[joueur].backgroundDom.style.backgroundImage = "url('/files/images/background"+message.background+".png')";
                    v[joueur].persoId = message.perso;

                    v[item].splice(0, v[item].length-1);

                    v[pattern] = message.pattern;
                    for(iPat in v[pattern]){
                        if(v[pattern][iPat].x != "no")
                        {
                            displayPattern(joueur, v[pattern][iPat].id, v[pattern][iPat].x);
                        }
                    }
                    v[joueur].col = message.col;
                    v[joueur].ligne = message.ligne;
                    updateInfo(message);
                break;
                
            case "fog" :
                v[joueurOpp].fog = true;
                v[joueurOpp].fogX = 880;
                updateInfo(message);
                break;
                
            case "invincible":
                v[joueur].isInvincible = true;
                v[joueur].hauteur = 10;
                v[joueur].occurSaute = determineNear_occurSaute(v[joueur].y, 10);
                updateInfo(message);
                break;
                
            case "napalm" :
                if(c["watch"] && joueur == "joueur"){
                    v["joueur-dist"].receiveNapalm = true;
                } else if(c["watch"] && joueur == "joueur-dist"){
                    v["joueur"].receiveNapalm = true;
                } else {
                    v["joueur"].receiveNapalm = true;
                    document.getElementById("alert_message").innerHTML = "NAPALM EN VUE !";                updateInfo(message);
                }
                updateInfo(message);
            break;
            case "ShieldOn":
                if(c["watch"]){
                    v[weapon].Shield.enable = message.isShield;
                }
                else if(message.pseudo != v["joueur"].pseudo){
                    v["weapon-dist"].Shield.enable = message.isShield;
                }
                updateInfo(message);
            break;
            case "GetHealth":
                updateInfo(message);
            break;
        }
    } else if(message.pseudo == v["joueur"].pseudo && message.type == "napalm"){
        v["joueur-dist"].receiveNapalm = true;
    }
}

function receivePushChatMessage(message)
{
    if(c['watch'] && message.pseudo != c["watch"].pseudo){
        ajoutTextChat(message.pseudo, message.texte);
    }
	else if(!c["watch"] && message.pseudo != v["joueur"].pseudo){
		ajoutTextChat(message.pseudo, message.texte);
	}
}

function initPattern()
{
    $.getJSON('/files/js/pattern.js', function (data){
        v["constantes"].matrix = data;
        v["timer"] = setInterval("incrementeTimer()", 40);
    });
}

function getXMLHttpRequest() {
	var xhr = null;

	if (window.XMLHttpRequest || window.ActiveXObject) {
		if (window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
		} else {
			xhr = new XMLHttpRequest(); 
		}
	} else {
		alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
		return null;
	}

	return xhr;
}

function updateInfo(message){
    if(c["watch"])
        {
            if(message.pseudo == c["me"].pseudo)
            {
                var joueur = "joueur";
                var joueurOpp = "joueur-dist";
                var weapon = "weapon";
            } else if(message.pseudo == c["op"].pseudo)
            {
                var joueur = "joueur-dist";
                var joueurOpp = "joueur";
                var weapon = "weapon-dist";
            } else {
                return;
            }
        }
        else {
            var joueur = "joueur-dist";
            var joueurOpp = "joueur";
            var weapon = "weapon-dist";
        }
    if(typeof(message.rage) != "undefined" && message.rage-v[joueur].rage>0){
        gainrage(joueur, message.rage-v[joueur].rage);
    } else if(typeof(message.rage) != "undefined" && message.rage-v[joueur].rage<0){
        loserage(joueur, Math.abs(message.rage-v[joueur].rage));
    }
    if(typeof(message.vie) != "undefined"){
        setLife(joueur, message.vie);
    }
    if(typeof(message.furious) != "undefined" && message.furious-v[joueur].furious>0){
        gainfurious(joueur, message.furious-v[joueur].furious);
    } else if (typeof(message.furious) != "undefined"){
        losefurious(joueur, Math.abs(message.furious-v[joueur].furious));
    }
    if(typeof(message.Shield) != "undefined"){
        v[weapon].Shield.enable = message.isShield;
    }
    if(typeof(message.nbShield) != "undefined"){
        v[weapon].Shield.number = message.nbShield;
    }
    document.getElementById("nb-teleport-"+joueur).innerHTML = "x" + v[weapon].Shield.number;
    
    if(typeof(message.nbBullet) != "undefined"){
        v[weapon].FireBullet.number = message.nbBullet;
    }
    document.getElementById("nb-firebullet-"+joueur).innerHTML = "x" + v[weapon].FireBullet.number;
    
    if(typeof(message.nbHeal) != "undefined"){
        v[weapon].Heal.number = message.nbHeal;
    }
    document.getElementById("nb-heal-"+joueur).innerHTML = "x" + v[weapon].Heal.number;
    
    if(typeof(message.nbSpecial) != "undefined"){
        v[weapon].Special.number = message.nbSpecial;
    }
    document.getElementById("nb-special-"+joueur).innerHTML = "x" + v[weapon].Special.number;
    
    if(typeof(message.nbFog) != "undefined"){
        v[weapon].Fog.number = message.nbFog;
    }
    document.getElementById("nb-steal-"+joueur).innerHTML = "x" + v[weapon].Fog.number;
}